/**
 * 结构体
 */
/// 结构体和我们在第三章讨论过的元组类似。
/// 和元组一样，结构体的每一部分可以是不同类型。
/// 但不同于元组，结构体需要命名各部分数据以便能清楚的表明其值的意义。
/// 由于有了这些名字，结构体比元组更灵活：不需要依赖顺序来指定或访问实例中的值。
pub struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn build_user(name: &str, email: &str) -> User {
    User {
        username: String::from(name),
        email: String::from(email),
        sign_in_count: 34,
        active: false,
    }
}
/*fn area(width: u32, height: u32) -> u32 {
    width * height
}*/
#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}
impl Rectangle{
    fn area(&self)->u32{
        self.width*self.height
    }
    fn can_holde(&self,other:&Rectangle)->bool{
        self.width>other.width && self.height>other.height
    }
    //关联函数
    fn square(size:u32)->Rectangle{
        Rectangle{width:size,height:size}
    }
}
pub fn test() {
    let user = build_user("a", "b");
    println!("{}",user.username);
    let rec = Rectangle {
        width: 30,
        height: 50,
    };
    println!("{:#?}", rec);
    println!("{}", rec.area());
    let rec1 = Rectangle::square(20);
    println!("{:#?}",rec.can_holde(&rec1));
}
